<?xml version="1.0" encoding="UTF-8"?>
<GenerateModel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="generateMetaModel_Module.xsd">
    <PythonExport
        Name="BSplineCurve2dPy"
        Namespace="Part"
        Twin="Geom2dBSplineCurve"
        TwinPointer="Geom2dBSplineCurve"
        PythonName="Part.Geom2d.BSplineCurve2d"
        FatherInclude="Mod/Part/App/Geom2d/Curve2dPy.h"
        Include="Mod/Part/App/Geometry2d.h"
        Father="Curve2dPy"
        FatherNamespace="Part"
        Constructor="true">
        <Documentation>
            <Author Licence="LGPL" Name="Werner Mayer" EMail="wmayer@users.sourceforge.net"/>
            <UserDocu>Describes a B-Spline curve in 3D space</UserDocu>
        </Documentation>
        <Attribute Name="Degree" ReadOnly="true">
            <Documentation>
                <UserDocu>Returns the polynomial degree of this B-Spline curve.</UserDocu>
            </Documentation>
            <Parameter Name="Degree" Type="Long"/>
        </Attribute>
        <Attribute Name="MaxDegree" ReadOnly="true">
            <Documentation>
                <UserDocu>Returns the value of the maximum polynomial degree of any
B-Spline curve curve. This value is 25.</UserDocu>
            </Documentation>
            <Parameter Name="MaxDegree" Type="Long"/>
        </Attribute>
        <Attribute Name="NbPoles" ReadOnly="true">
            <Documentation>
                <UserDocu>Returns the number of poles of this B-Spline curve.</UserDocu>
            </Documentation>
            <Parameter Name="NbPoles" Type="Long"/>
        </Attribute>
        <Attribute Name="NbKnots" ReadOnly="true">
            <Documentation>
                <UserDocu>Returns the number of knots of this B-Spline curve.</UserDocu>
            </Documentation>
            <Parameter Name="NbPoles" Type="Long"/>
        </Attribute>
        <Attribute Name="StartPoint" ReadOnly="true">
            <Documentation>
                <UserDocu>Returns the start point of this B-Spline curve.</UserDocu>
            </Documentation>
            <Parameter Name="StartPoint" Type="Object"/>
        </Attribute>
        <Attribute Name="EndPoint" ReadOnly="true">
            <Documentation>
                <UserDocu>Returns the end point of this B-Spline curve.</UserDocu>
            </Documentation>
            <Parameter Name="EndPoint" Type="Object"/>
        </Attribute>
        <Attribute Name="FirstUKnotIndex" ReadOnly="true">
            <Documentation>
                <UserDocu>Returns the index in the knot array of the knot
corresponding to the first or last parameter
of this B-Spline curve.</UserDocu>
            </Documentation>
            <Parameter Name="FirstUKnotIndex" Type="Object"/>
        </Attribute>
        <Attribute Name="LastUKnotIndex" ReadOnly="true">
            <Documentation>
                <UserDocu>Returns the index in the knot array of the knot
corresponding to the first or last parameter
of this B-Spline curve.</UserDocu>
            </Documentation>
            <Parameter Name="LastUKnotIndex" Type="Object"/>
        </Attribute>
        <Attribute Name="KnotSequence" ReadOnly="true">
            <Documentation>
                <UserDocu>Returns the knots sequence of this B-Spline curve.</UserDocu>
            </Documentation>
            <Parameter Name="KnotSequence" Type="List"/>
        </Attribute>
        <Methode Name="isRational">
            <Documentation>
                <UserDocu>Returns true if this B-Spline curve is rational.
                    A B-Spline curve is rational if, at the time of construction,
                    the weight table has been initialized.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="isPeriodic">
            <Documentation>
                <UserDocu>Returns true if this BSpline curve is periodic.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="isClosed">
            <Documentation>
                <UserDocu>Returns true if the distance between the start point and end point of
                    this B-Spline curve is less than or equal to gp::Resolution().</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="increaseDegree">
            <Documentation>
                <UserDocu>increase(Int=Degree)
Increases the degree of this B-Spline curve to Degree.
As a result, the poles, weights and multiplicities tables
are modified; the knots table is not changed. Nothing is
done if Degree is less than or equal to the current degree.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="increaseMultiplicity">
            <Documentation>
                <UserDocu>increaseMultiplicity(int index, int mult)
                increaseMultiplicity(int start, int end, int mult)
                Increases multiplicity of knots up to mult.

                index: the index of a knot to modify (1-based)
                start, end: index range of knots to modify.
                If mult is lower or equal to the current multiplicity nothing is done. If mult is higher than the degree the degree is used.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="incrementMultiplicity">
            <Documentation>
                <UserDocu>incrementMultiplicity(int start, int end, int mult)
                Raises multiplicity of knots by mult.

                start, end: index range of knots to modify.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="insertKnot">
            <Documentation>
                <UserDocu>insertKnot(u, mult = 1, tol = 0.0)
                Inserts a knot value in the sequence of knots. If u is an existing knot the
                multiplicity is increased by mult.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="insertKnots">
            <Documentation>
                <UserDocu>insertKnots(list_of_floats, list_of_ints, tol = 0.0, bool_add = True)
                Inserts a set of knots values in the sequence of knots.

                For each u = list_of_floats[i], mult = list_of_ints[i]

                If u is an existing knot the multiplicity is increased by mult if bool_add is
                True, otherwise increased to mult.

                If u is not on the parameter range nothing is done.

                If the multiplicity is negative or null nothing is done. The new multiplicity
                is limited to the degree.

                The tolerance criterion for knots equality is the max of Epsilon(U) and ParametricTolerance.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="removeKnot">
            <Documentation>
                <UserDocu>removeKnot(Index, M, tol)

                    Reduces the multiplicity of the knot of index Index to M.
                    If M is equal to 0, the knot is removed.
                    With a modification of this type, the array of poles is also modified.
                    Two different algorithms are systematically used to compute the new
                    poles of the curve. If, for each pole, the distance between the pole
                    calculated using the first algorithm and the same pole calculated using
                    the second algorithm, is less than Tolerance, this ensures that the curve
                    is not modified by more than Tolerance. Under these conditions, true is
                    returned; otherwise, false is returned.

                    A low tolerance is used to prevent modification of the curve.
                    A high tolerance is used to 'smooth' the curve.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="segment">
            <Documentation>
                <UserDocu>segment(u1,u2)
                    Modifies this B-Spline curve by segmenting it.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="setKnot">
            <Documentation>
                <UserDocu>Set a knot of the B-Spline curve.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="getKnot">
            <Documentation>
                <UserDocu>Get a knot of the B-Spline curve.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="setKnots">
            <Documentation>
                <UserDocu>Set knots of the B-Spline curve.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="getKnots">
            <Documentation>
                <UserDocu>Get all knots of the B-Spline curve.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="setPole">
            <Documentation>
                <UserDocu>Modifies this B-Spline curve by assigning P
to the pole of index Index in the poles table.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="getPole">
            <Documentation>
                <UserDocu>Get a pole of the B-Spline curve.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="getPoles">
            <Documentation>
                <UserDocu>Get all poles of the B-Spline curve.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="setWeight">
            <Documentation>
                <UserDocu>Set a weight of the B-Spline curve.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="getWeight">
            <Documentation>
                <UserDocu>Get a weight of the B-Spline curve.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="getWeights">
            <Documentation>
                <UserDocu>Get all weights of the B-Spline curve.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="getPolesAndWeights">
            <Documentation>
                <UserDocu>Returns the table of poles and weights in homogeneous coordinates.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="getResolution" Const="true">
            <Documentation>
                <UserDocu>Computes for this B-Spline curve the parametric tolerance (UTolerance)
for a given 3D tolerance (Tolerance3D).
If f(t) is the equation of this B-Spline curve, the parametric tolerance
ensures that:
|t1-t0| &lt; UTolerance =&quot;&quot;==&gt; |f(t1)-f(t0)| &lt; Tolerance3D</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="movePoint">
            <Documentation>
                <UserDocu>movePoint(U, P, Index1, Index2)
                Moves the point of parameter U of this B-Spline curve to P.
Index1 and Index2 are the indexes in the table of poles of this B-Spline curve
of the first and last poles designated to be moved.

Returns: (FirstModifiedPole, LastModifiedPole). They are the indexes of the
first and last poles which are effectively modified.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="setNotPeriodic">
            <Documentation>
                <UserDocu>Changes this B-Spline curve into a non-periodic curve.
If this curve is already non-periodic, it is not modified.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="setPeriodic">
            <Documentation>
                <UserDocu>Changes this B-Spline curve into a periodic curve.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="setOrigin">
            <Documentation>
                <UserDocu>Assigns the knot of index Index in the knots table
as the origin of this periodic B-Spline curve. As a consequence,
the knots and poles tables are modified.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="getMultiplicity">
            <Documentation>
                <UserDocu>Returns the multiplicity of the knot of index
from the knots table of this B-Spline curve.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="getMultiplicities">
            <Documentation>
                <UserDocu>Returns the multiplicities table M of the knots of this B-Spline curve.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="approximate" Keyword="true">
            <Documentation>
                <UserDocu>Replaces this B-Spline curve by approximating a set of points.
                    The function accepts keywords as arguments.

                    approximate2(Points = list_of_points)

                    Optional arguments :

                    DegMin = integer (3) : Minimum degree of the curve.
                    DegMax = integer (8) : Maximum degree of the curve.
                    Tolerance = float (1e-3) : approximating tolerance.
                    Continuity = string ('C2') : Desired continuity of the curve.
                    Possible values : 'C0','G1','C1','G2','C2','C3','CN'

                    LengthWeight = float, CurvatureWeight = float, TorsionWeight = float
                    If one of these arguments is not null, the functions approximates the
                    points using variational smoothing algorithm, which tries to minimize
                    additional criterium:
                    LengthWeight*CurveLength + CurvatureWeight*Curvature + TorsionWeight*Torsion
                    Continuity must be C0, C1 or C2, else defaults to C2.

                    Parameters = list of floats : knot sequence of the approximated points.
                    This argument is only used if the weights above are all null.

                    ParamType = string ('Uniform','Centripetal' or 'ChordLength')
                    Parameterization type. Only used if weights and Parameters above aren't specified.

                    Note : Continuity of the spline defaults to C2. However, it may not be applied if
                    it conflicts with other parameters ( especially DegMax ).</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="getCardinalSplineTangents" Keyword="true">
            <Documentation>
                <UserDocu>Compute the tangents for a Cardinal spline</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="interpolate" Keyword="true">
            <Documentation>
                <UserDocu>Replaces this B-Spline curve by interpolating a set of points.
                    The function accepts keywords as arguments.

                    interpolate(Points = list_of_points)

                    Optional arguments :

                    PeriodicFlag = bool (False) : Sets the curve closed or opened.
                    Tolerance = float (1e-6) : interpolating tolerance

                    Parameters : knot sequence of the interpolated points.
                    If not supplied, the function defaults to chord-length parameterization.
                    If PeriodicFlag == True, one extra parameter must be appended.

                    EndPoint Tangent constraints :

                    InitialTangent = vector, FinalTangent = vector
                    specify tangent vectors for starting and ending points
                    of the BSpline. Either none, or both must be specified.

                    Full Tangent constraints :

                    Tangents = list_of_vectors, TangentFlags = list_of_bools
                    Both lists must have the same length as Points list.
                    Tangents specifies the tangent vector of each point in Points list.
                    TangentFlags (bool) activates or deactivates the corresponding tangent.
                    These arguments will be ignored if EndPoint Tangents (above) are also defined.

                    Note : Continuity of the spline defaults to C2. However, if periodic, or tangents
                    are supplied, the continuity will drop to C1.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="buildFromPoles">
            <Documentation>
                <UserDocu>Builds a B-Spline by a list of poles.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="buildFromPolesMultsKnots" Keyword="true">
            <Documentation>
                <UserDocu>Builds a B-Spline by a lists of Poles, Mults, Knots.
                arguments: poles (sequence of Base.Vector), [mults , knots, periodic, degree, weights (sequence of float), CheckRational]

                Examples:
                from FreeCAD import Base
                import Part
                V=Base.Vector
                poles=[V(-10,-10),V(10,-10),V(10,10),V(-10,10)]

                # non-periodic spline
                n=Part.BSplineCurve()
                n.buildFromPolesMultsKnots(poles,(3,1,3),(0,0.5,1),False,2)
                Part.show(n.toShape())

                # periodic spline
                p=Part.BSplineCurve()
                p.buildFromPolesMultsKnots(poles,(1,1,1,1,1),(0,0.25,0.5,0.75,1),True,2)
                Part.show(p.toShape())

                # periodic and rational spline
                r=Part.BSplineCurve()
                r.buildFromPolesMultsKnots(poles,(1,1,1,1,1),(0,0.25,0.5,0.75,1),True,2,(1,0.8,0.7,0.2))
                Part.show(r.toShape())</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="toBezier">
            <Documentation>
                <UserDocu>Build a list of Bezier splines.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="toBiArcs">
            <Documentation>
                <UserDocu>Build a list of arcs and lines to approximate the B-spline.
                    toBiArcs(tolerance) -&gt; list.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="join">
            <Documentation>
                <UserDocu>Build a new spline by joining this and a second spline.</UserDocu>
            </Documentation>
        </Methode>
        <Methode Name="makeC1Continuous">
            <Documentation>
                <UserDocu>makeC1Continuous(tol = 1e-6, ang_tol = 1e-7)
                    Reduces as far as possible the multiplicities of the knots of this BSpline
                    (keeping the geometry). It returns a new BSpline, which could still be C0.
                    tol is a geometrical tolerance.
                    The tol_ang is angular tolerance, in radians. It sets tolerable angle mismatch
                    of the tangents on the left and on the right to decide if the curve is G1 or
                    not at a given point.</UserDocu>
            </Documentation>
        </Methode>
    </PythonExport>
</GenerateModel>
